import com.sun.deploy.util.ArrayUtil;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author: wh(1835734390 @ qq.com)
 * @date: 2023/4/25 15:54
 * @description:
 * @version:
 */

/**
 * 定义一个接口Shape,它有一个方法Area()， 返回一个浮点数，这个浮点数代表了形状的面积。然后，我们定义了两个结构体Rectangle和Circle,它们都实现了Shape接口。
 * Rectangle代表矩形，它有宽度和高度两个属性; Circle代表圆形，它有半径个属性。
 * 你的任务是编写一个函数typeDistinguish(shapes IShape)。这个函数接收一个Shape接口的切片作为输入，然后返回两个切片，
 * 一个包含所有的Rectangle对象，另一个包含所有的Circle对象。 你不能修改输入切片中的任何元素，也不能在函数中创建新的Rectangle或Circle对象。
 * 你需要使用类型断言或者类型判断的方式来完成这个任务 用java写
 */
public class Test {
    interface Shape {
        double area();
    }

    class Rectangle implements Shape {
        private double width;
        private double height;

        public Rectangle(double width, double height) {
            this.width = width;
            this.height = height;
        }

        @Override
        public double area() {
            return width * height;
        }
    }

    class Circle implements Shape {
        private double radius;

        public Circle(double radius) {
            this.radius = radius;
        }

        @Override
        public double area() {
            return Math.PI * radius * radius;
        }
    }

    public class Main {
        public  void main(String[] args) {
            List<Shape> shapes = new ArrayList<>();
            shapes.add(new Rectangle(5, 4));
            shapes.add(new Circle(3));
            shapes.add(new Rectangle(2, 6));
            shapes.add(new Circle(2.5));
            //多态
            Shape t = new Rectangle(2,2);
            Shape s = new Circle(2);


            List<Rectangle> rectangles = new ArrayList<>();
            List<Circle> circles = new ArrayList<>();

            typeDistinguish(shapes, rectangles, circles);

            System.out.println("Rectangles:");
            for (Rectangle rect : rectangles) {
                System.out.printf("Area: %.2f%n", rect.area());
            }

            System.out.println("\nCircles:");
            for (Circle circle : circles) {
                System.out.printf("Area: %.2f%n", circle.area());
            }
        }

        public  void typeDistinguish(List<Shape> shapes, List<Rectangle> rectangles, List<Circle> circles) {
            for (Shape shape : shapes) {
                if (shape instanceof Rectangle) {
                    rectangles.add((Rectangle) shape);
                } else if (shape instanceof Circle) {
                    circles.add((Circle) shape);
                }
            }
        }
    }


}
